<template>
    <div>
        <p>{{num}}</p>
        <button @click="add1">1</button>
        <!-- 传递参数需要带$event -->
        <button @click="add2(2,'abc',$event)">2</button>

        <!-- 事件修饰符: -->

        <!-- 阻止冒泡： -->
        <a v-on:click.stop="doThis"></a>
        <!-- 提交事件不再重载页面 -->
        <form v-on:submit.prevent="onSubmit"></form>
        <!-- 修饰符都是可以串联的： -->
        <a v-on:click.stop.prevent="doThat"></a>
        <!-- 只有修饰符 -->
        <form v-on:submit.prevent></form>
        <!-- 添加事件监听器时使用事件捕获模式 -->
        <!-- 即内部元素触发的事件先在此处理，然后才交由内部元素进行处理 -->
        <div v-on:click.capture="doThis">....</div>
        <!-- 只当event.target是当前元素自身时触发处理函数 -->
        <!-- 即事件不是从内部元素触发的 -->
        <div v-on:click.self="doThat">...</div>

        <!-- 按键修饰符 -->
        <!-- 即使 Alt和Shift被一同按下时也会触发 -->
        <button @click.ctrl="onClick">A</button>
        <!-- 有且只有Ctrl被按下的时候才触发 -->
        <button @click.ctrl.exact="onCtrlClick">A</button>
        <!-- 没有任何系统修饰符被按下的时候触发 -->
        <button @click.exact="onClick">A</button>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                num: 0
            }
        },
        methods: {
            // 默认传递event
            add1(event) {
                // 原生evnet
                console.log('event', event, event.__proto__constructor)
                // 在哪个事件上监听的:
                console.log(event.target)
                // 事件是被在什么地方触发的
                console.log(event.currentTarget)
                this.num++

                // 1.event是原生的
                // 2.事件被挂载到当前元素
            },
            add2(val, str, event) {
                // 传递的自定义参数
                console.log(str)
                console.log(event.target)
                this.num = this.num + val
            }
        },
    }
</script>
<style>

</style>